人気急上昇!PHPフレームワーク「Laravel」を使ってみました。簡易会員サイト作成編
2014.09.24
この記事は最終更新日から1年以上が経過しています。
前回、こちらで
人気急上昇!PHPフレームワーク「Laravel」を使ってみました。 インストール 〜 起動まで。
インストールまで行ったので、今回は 基本的な使い方や「artisan(アーティザン)」コマンドの「migrate(マイグレート)」オプション周りや、簡易の会員サイトの作成を行なって行きたいと思います。
インストール
何はともあれインストールから振り返ってみましょう。
基本はこちらの
Laravelクイックスタート
http://laravel4.kore1server.com/docs/quick
でまとまっていますので、こちらを元に進めていきます。
LaravelフレームワークはComposerをインストールと依存パッケージの管理に活用しています。
とのことなので、Composerをインストールした環境で、以下のコマンドでサクっとプロジェクトの作成が行えます。
composer create-project laravel/laravel=4.1.* your-project-name --prefer-dist
your-project-name のところは任意の名前で。
パーミッション
app/storage 以下はサーバーが書き込めるように権限変更が必要です。
Laravelのサーバー
PHP5.4以上を使用しているのであれば、Artisan ‘serve’コマンドで、開発サーバーを使用することが可能なのです!
php artisan serve
ディレクトリ
主に、appディレクトリーの
views
controllers
models
を扱う機会が多いでしょう。
設定ファイルは app/config 以下のファイルとなっております。
ルーティング
ルーティングの設定は app/routes.php となっております。
では、例に習って以下を追加。
app/routes.php
Route::get('users', function() {return 'Users!';});
/usersへアクセスすると、Users!と表示。Yeah!
コントローラークラスの指定も以下の様な記述で行えます。
Route::get('users', 'UserController@getIndex');
ビュー
ビューは app/viewsディレクトリー 以下のファイルとなります。
また、例に習って、layout.blade.phpとusers.blade.phpを修正。
app/views/layout.blade.php
<html>
<body>
<h1>Laravelクイックスタート</h1>
@yield('content')
</body>
</html>
app/views/user.blade.php
@extends('layout')@section('content')Users!@stop
Bladeテンプレートファイルは「任意のファイル名.blade.php 」となっております。
表示させたいViewの記述は、View::make(‘ファイル名’);
となっておりますので
app/routes.php
Route::get('users', function() {return View::make('users');});
と、ルーティングの設定に追加。
とここまで出来たらデータベースの方の設定へと。
マイグレーション
「artisan(アーティザン)」コマンドの「migrate(マイグレート)」オプションを使うことによって、
データベースをサクっと作成することが可能となっております。
データベース接続の設定ファイルは「app/config/database.php」となっております。
'default' => 'mysql',
を使用するデータベースを記述します。(mysqlはデフォルト)
app/config/database.php
〜 省略 〜
'mysql' => array(
'driver' => 'mysql',
'host' => 'localhost',
'database' => 'laravel',
'username' => 'root',
'password' => 'password',
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
),
〜 省略 〜
こちらでデータベース接続設定を行います。
上記の場合だと、laravelのデータベースにroot権限のパスワードは「password」となります。
ターミナルを起動し、プロジェクトのルートディレクトリー(artisanがあるディレクトリ)で以下のコマンドを入力
php artisan migrate:make create_users_table
app/database/migrations 以下に「2014_◯◯_◯◯_create_users_table.php」の様なファイルが作成されたかと思います。
そのファイルを開くと、upとdownのメソッドが記述されているかと思います。
2014_◯◯_◯◯_create_users_table.php
public function up() {
Schema::create('users', function($table) {
$table->increments('id');
$table->string('email')->unique();
$table->string('name');
$table->timestamps();
});
}
public function down() {
Schema::drop('users');
}
それぞれ、upメソッドにはデータベーステーブルに対する変更を記述、downメソッドにはその変更をもとに戻す指定(ロールバック時に実行)を記述します。
これらを記述しターミナルでmigrateコマンド実行。
php artisan migrate
あっと言う間に、
Eloquent ORM
これまた便利な機能の一つで、関連するデーターベーステーブルにクエリーし、モデル名の複数形を使用することが可能となっております。
モデルとなるファイルは「app/models」以下に格納します。
phpmyadminを使って、データを挿入します。
データを挿入したら「app/routes.php」を編集。
app/routes.php
Route::get('users', function() {
$users = User::all();return View::make('users')->with('users', $users);
});
User::all(); で全レコードを取得。
withメソッドを使用しビューに渡す。withメソッドにはキーと値を渡し、ビューで使用できる変数を指定。
データ表示
ビューを編集します。「app/views/user.blade.php」を編集。
app/views/user.blade.php
@extends('layout')
@section('content')
@foreach($users as $user)
<p>{{$user->id}} {{ $user->name }}</p>
<p>{{ $user->email }}</p>
@endforeach
@stop
修正したらブラウザで /usersにアクセス。
このように表示すれば成功!
超簡易会員サイト作成
とここまで、基本的な使用方法を書いてきました。
では早速、簡易会員サイトを作成していきましょう。
こちらの「Laravelでのログイン処理のかきかた」がサクっと作成する方法が書かれていましたので、
実際にやってみましょう。
IT屋だけど、なにか?
http://blog.e2info.com/2013/07/04/phplaravel_auth/
ホンのちょっと修正して、情報を入力してログインするページとプロフィールページを作成していきます。
まず、
composer create-project laravel/laravel=4.1.* laravel_members --prefer-dist
でプロジェクトの作成。(プロジェクト名はlaravel_members)
データベース作成
reate database laravel_member
app/config/database.php でデータベースの接続設定を行います。
設定が完了しましたら、 続いてルーティングの設定を。
app/routes.php
Route::when('', 'auth');
Route::get('/login', function() {
return View::make('user/login');
});
Route::post('/login', array('before' => 'csrf', function() {
$inputs = Input::only(array('name', 'password'));
if ( Auth::attempt($inputs) ) {
return View::make("user/profile");
} else {
return Redirect::back()->withInput();
}
}));
を追加。
Route::when(”, ‘auth’);で全てのベージで認証の有効にしていますが、部分的にも可能となっております。
例:
Route::when(‘admin/*’, ‘admin’);
続いてViewの作成。ログインページを作って行きます。
ログインページ
user/login.blade.php
@if ( Auth::guest() )
未ログイン
@else
ログイン済みです
@endif
{{ Form::open() }}
{{ Form::label("name", "Username") }}
{{ Form::text("name", Input::old('name', ''), [ "placeholder" => "web帳" ]) }}
{{ Form::label("password", "Password") }}
{{ Form::password("password", [ "placeholder" => "password" ]) }}
@if ($error = $errors->first("password"))
<div class="error"> {{ $error }} </div>
@endif {{ Form::submit("login") }}
{{ Form::close() }}
プロフィールページ
user/profile.blade.php
<h2>いらっしゃい、{{ Auth::user()->name }}さん</h2>
<p>プロファイルページヘようこそ。</p>
Bladeテンプレートに関してはいつかまとめられたらと思いつつ。。。
ここまでで一通り完了しましたので、テーブルを強引に作成する記述をルーティングに含めます。
app/routes.php
Route::get('/create-users-table', function() {
Schema::create('users', function($table) {
$table->increments('id');
$table->string('name', 100);
$table->string('password', 100);
$table->timestamps();
});
$user = new User;
$user->name = 'user';
$user->password = Hash::make('password');
$user->save();
return 'テーブル作成';
});
ブラウザで /create-users-table をアクセスすると、サクっとテーブルが作成されちゃいます!
ログアウトの処理も追加しておきます。
app/routes.php
Route::get('/logout', function() {
Auth::logout();
return Redirect::to('/login');
});
これで、超簡易ログインテスト完成!
/login をアクセスし、 usernameに「user」passwordに「password」を入力し、submitを押すと
きちんと飛んだ。/logout をアクセスすると、ログアウトし再びログインページにリダイレクトされるかと思います。
これらのソースは以下のURLにあります。(ブランチ:feature/minimum)
GitHub : webcyou
https://github.com/webcyou/laravel_members/tree/feature/minimum
コントローラを使った記述
上記の作成方法は超手軽に作ったので、今度はLaravelっぽく、Controllerを使った記述を行なっていきます。
まず、routes.phpの精査を行なって行きます。
app/routes.php
Route::group(["before"=>"guest"],function() {
とグループ分けを行い、認証前のguest状態と認証後で振分けを行います。
Route::group(["before"=>"guest"],function() {
Route::any("/login", [
"as" => "user/login",
"uses" => "UserController@loginAction"
]);
});
Route::group(["before"=>"auth"],function() {
Route::any("/profile", [
"as" => "user/profile",
"uses" => "UserController@profileAction"
]);
Route::any("/logout", [
"as" => "/",
"uses" => "UserController@logoutAction"
]);
});
“before”=>”guest”で認証前。”before”=>”auth”で認証後。
続いて、コントローラの作成を行います。
コントローラはcontrollers/ 以下に格納していきます。
app/controllers/UserController.php
<?php
class UserController extends Controller {
public function loginAction() {
if (Input::server("REQUEST_METHOD") == "POST") {
$validator = Validator::make(Input::all(), [
"name" => "required",
"password" => "required"
]);
if ($validator->passes()) {
$credentials = [
"name" => Input::get("name"),
"password" => Input::get("password")
];
if (Auth::attempt($credentials)) {
return Redirect::route("user/profile");
}
} else {
$data["name"] = Input::get("name");
return Redirect::route("user/login")->withInput($data);
}
}
return View::make("user/login");
}
public function profileAction() {
return View::make("user/profile");
}
public function logoutAction() {
Auth::logout();
return Redirect::to("/login");
}
}
完成。
ログインページは同様。
usernameに「user」passwordに「password」を入力し、submitでログインしプロフィールページに行っているかと思いますが、
logoutを行うため、/logoutを叩こうとすると、どうも上手く行かず、
config/app.php の
‘debug’ => false, を ‘debug’ => true
にすることによって、エラーログが表示されますので、変更したところ、
と怒られました。
どうやら、remember_token カラムが必要のようです。
こちらにも記載しているとおり、
http://laravel4.kore1server.com/docs/security
——————————————–
注意:とりかかる前に、usersテーブル(もしくはユーザーを管理するテーブル)に、nullを許し(nullable)、長さ100文字の文字列で、remember_tokenカラムが含まれていることを確認してください。このカラムは、アプリケーションで”Remember me”セッションのトークンを保存しておくために使用されるカラムです。
——————————————–
とのことですので、remember_tokenカラムを作成。
すると、logout処理も行えました。
これらのソースはこちらで確認出来ます。ブランチ:feature/controller)
GitHub : webcyou
https://github.com/webcyou/laravel_members/tree/feature/controller
次回は更に作り込めたら。

























